home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / utility / utilcli / reqch.lha / ReqCh / ReqCh.s < prev    next >
Text File  |  1996-10-28  |  9KB  |  446 lines

  1. *****************************************************************************
  2. *                                        *
  3. *    PROGRAM: ReqCh     (a replacement for RequestChoice)            *
  4. *    VERSION: 40.1                                *
  5. *   SOURCE CODE: 7                                *
  6. *       DATE: 23.10.1996                            *
  7. *      LANGUAGE: Assembler                            *
  8. *     SYSTEM: A1200  KS 40.68 WB 40.42 2MB chip 8MB fast 68030/50mhz        *
  9. *                                        *
  10. *     AUTHOR: Joerg Riemer 14167 Berlin/SchottmuellerStr.107/Germany        *
  11. *      EMAIL: mission@cs.tu-berlin.de                    *
  12. *                                        *
  13. *      FUNCTION: ReqCh lets AmigaDOS and ARexx scripts use the            *
  14. *         Intuition EasyRequest() feature. It is a replacement        *
  15. *         for the bugy command C:RequestChoice (new for [V39])        *
  16. *         Read the ReqCh.doc for more information.            *
  17. *                                        *
  18. *  NEW FEATURES: creates a local variable called "ReqChGG" to hold        *
  19. *         the gadget number selected by the user                *
  20. *                                        *
  21. *       BUGS: none (i hope so)                        *
  22. *                                        *
  23. *****************************************************************************
  24.  
  25.         SECTION    ReqCh,CODE
  26.  
  27. ****************************************************************************
  28.  
  29. Start        link.w    A5,#-$68
  30.         movem.l    D2/D3/D5-D7/A2/A3/A6,-(SP)
  31.  
  32.         movea.w    #4,A0
  33.         movea.l    (A0),A2
  34.         movea.l    A2,A0
  35.         moveq    #ERROR_INVALID_RESIDENT_LIBRARY,D7
  36.         moveq    #RETURN_FAIL,D6
  37.         move.l    A0,($32,SP)
  38.         move.l    A6,-(SP)
  39.         lea    (DOSName,PC),A1
  40.         moveq    #37,D0
  41.         movea.l    A2,A6
  42.         jsr    (_LVOOpenLibrary,A6)
  43.         movea.l    (SP)+,A6
  44.         movea.l    D0,A3
  45.         movea.l    A3,A0
  46.         move.l    A0,($2E,SP)
  47.         move.l    A3,D0
  48.         beq.w    LC3C8
  49.  
  50.         move.l    A6,-(SP)
  51.         lea    (INTName,PC),A1
  52.         moveq    #37,D0
  53.         movea.l    A2,A6
  54.         jsr    (_LVOOpenLibrary,A6)
  55.         movea.l    (SP)+,A6
  56.         move.l    D0,($2A,SP)
  57.         tst.l    D0
  58.         beq.w    LC39A
  59.  
  60.         moveq    #15,D1
  61.         moveq    #0,D2
  62.         lea    (-$24,A5),A0
  63. LC058        move.b    D2,(A0)+
  64.         dbra    D1,LC058
  65.         move.l    A6,-(SP)
  66.         lea    (ArgTemplate,PC),A0
  67.         move.l    A0,D1
  68.         lea    (-$24,A5),A1
  69.         move.l    A1,D2
  70.         moveq    #0,D3
  71.         movea.l    A3,A6
  72.         jsr    (_LVOReadArgs,A6)
  73.         movea.l    (SP)+,A6
  74.         tst.l    D0
  75.         beq.w    LC364
  76.  
  77.         moveq    #ERROR_REQUIRED_ARG_MISSING,D7
  78.         lea    (Buffer,PC),A3
  79.         move.l    D0,(A3)
  80.         movea.l    (-$20,A5),A3
  81.         movea.l    A3,A0
  82.         movea.l    (-$1C,A5),A2
  83.         move.l    A0,($20,SP)
  84.         move.l    A2,D0
  85.         beq.w    LC370
  86.         tst.l    (A2)
  87.         beq.w    LC370
  88.  
  89.         movea.l    A3,A1
  90. LC0A0        tst.b    (A1)+
  91.         bne.b    LC0A0
  92.         subq.l    #1,A1
  93.         suba.l    A3,A1
  94.         move.l    A1,D0
  95.         move.w    D0,(-$3E,A5)
  96.         bra.b    LC0FA
  97.  
  98. LC0B0        movea.l    A3,A0
  99. LC0B2        tst.b    (A0)+
  100.         bne.b    LC0B2
  101.         subq.l    #1,A0
  102.         suba.l    A3,A0
  103.         move.l    A0,D0
  104.         addq.l    #1,D0
  105.         moveq    #0,D1
  106.         move.w    (-$3E,A5),D1
  107.         add.l    D0,D1
  108.         clr.w    (-$40,A5)
  109.         move.w    D1,(-$3E,A5)
  110.         bra.b    LC0EC
  111.  
  112. LC0D0        move.w    (-$40,A5),D0
  113.         move.l    D0,D1
  114.         addq.w    #1,D1
  115.         moveq    #0,D2
  116.         move.w    D0,D2
  117.         move.w    D1,(-$40,A5)
  118.         moveq    #$25,D0
  119.         cmp.b    (A3,D2.L),D0
  120.         bne.b    LC0EC
  121.         addq.w    #1,(-$3E,A5)
  122. LC0EC        moveq    #0,D0
  123.         move.w    (-$40,A5),D0
  124.         tst.b    (A3,D0.L)
  125.         bne.b    LC0D0
  126.         addq.l    #4,A2
  127. LC0FA        movea.l    (A2),A3
  128.         move.l    A3,D0
  129.         bne.b    LC0B0
  130.         clr.w    (-$40,A5)
  131.         movea.l    ($20,SP),A3
  132.         bra.b    LC128
  133.  
  134. LC10A        move.w    (-$40,A5),D0
  135.         move.l    D0,D1
  136.         addq.w    #1,D1
  137.         moveq    #0,D2
  138.         move.w    D0,D2
  139.         move.w    D1,(-$40,A5)
  140.         moveq    #$25,D0
  141.         cmp.b    (A3,D2.L),D0
  142.         bne.b    LC128
  143.         move.l    D5,D0
  144.         move.w    D0,(-$3E,A5)
  145. LC128        moveq    #0,D0
  146.         move.w    (-$3E,A5),D0
  147.         move.l    D0,D5
  148.         addq.l    #1,D5
  149.         moveq    #0,D0
  150.         move.w    (-$40,A5),D0
  151.         tst.b    (A3,D0.L)
  152.         bne.b    LC10A
  153.  
  154.         moveq    #ERROR_NO_FREE_STORE,D7
  155.         move.l    A6,-(SP)
  156.         move.l    D5,D0
  157.         moveq    #0,D1
  158.         movea.l    ($36,SP),A6
  159.         jsr    (_LVOAllocVec,A6)
  160.         movea.l    (SP)+,A6
  161.         movea.l    D0,A2
  162.         movea.l    A2,A0
  163.         move.l    A0,($26,SP)
  164.         move.l    A2,D0
  165.         beq.w    LC370
  166.  
  167.         moveq    #0,D0
  168.         move.w    D0,(-$42,A5)
  169.         move.w    D0,(-$40,A5)
  170.         bra.b    LC1AA
  171.  
  172. LC16A        move.w    ($24,SP),D0
  173.         move.b    (A3),(A2)
  174.         move.w    (-$40,A5),D1
  175.         move.l    D1,D2
  176.         addq.w    #1,D2
  177.         movea.l    ($20,SP),A3
  178.         moveq    #0,D3
  179.         move.w    D1,D3
  180.         movea.l    ($26,SP),A2
  181.         move.w    D0,(-$42,A5)
  182.         movem.w    D2,(-$40,A5)
  183.         moveq    #$25,D0
  184.         cmp.b    (A3,D3.L),D0
  185.         bne.b    LC1AA
  186.         move.w    (-$42,A5),D1
  187.         move.l    D1,D2
  188.         addq.w    #1,D2
  189.         moveq    #0,D3
  190.         move.w    D1,D3
  191.         move.b    D0,(A2,D3.L)
  192.         move.w    D2,(-$42,A5)
  193. LC1AA        moveq    #0,D0
  194.         move.w    (-$40,A5),D0
  195.         adda.l    D0,A3
  196.         moveq    #0,D0
  197.         move.w    (-$42,A5),D0
  198.         adda.l    D0,A2
  199.         addq.w    #1,D0
  200.         move.w    D0,($24,SP)
  201.         tst.b    (A3)
  202.         bne.b    LC16A
  203.         move.w    ($24,SP),(-$42,A5)
  204.         clr.b    (A2)
  205.         movea.l    (-$1C,A5),A3
  206.         bra.b    LC238
  207.  
  208. LC1D2        clr.w    (-$40,A5)
  209.         bra.b    LC212
  210.  
  211. LC1D8        addq.w    #1,(-$42,A5)
  212.         move.b    (A3),(A2)
  213.         move.w    (-$40,A5),D0
  214.         move.l    D0,D1
  215.         addq.w    #1,D1
  216.         movea.l    ($20,SP),A3
  217.         moveq    #0,D2
  218.         move.w    D0,D2
  219.         movea.l    ($26,SP),A2
  220.         move.w    D1,(-$40,A5)
  221.         moveq    #$25,D0
  222.         cmp.b    (A3,D2.L),D0
  223.         bne.b    LC212
  224.         move.w    (-$42,A5),D1
  225.         move.l    D1,D2
  226.         addq.w    #1,D2
  227.         moveq    #0,D3
  228.         move.w    D1,D3
  229.         move.b    D0,(A2,D3.L)
  230.         move.w    D2,(-$42,A5)
  231. LC212        moveq    #0,D0
  232.         move.w    (-$40,A5),D0
  233.         adda.l    D0,A3
  234.         moveq    #0,D0
  235.         move.w    (-$42,A5),D0
  236.         adda.l    D0,A2
  237.         tst.b    (A3)
  238.         bne.b    LC1D8
  239.         movea.l    (-$3C,A5),A3
  240.         addq.l    #4,A3
  241.         tst.l    (A3)
  242.         beq.b    LC238
  243.         addq.w    #1,(-$42,A5)
  244.         move.b    #$7C,(A2)
  245. LC238        move.l    A3,(-$3C,A5)
  246.         movea.l    (A3),A3
  247.         movea.l    A3,A0
  248.         movea.l    ($26,SP),A2
  249.         move.l    A0,($20,SP)
  250.         move.l    A3,D0
  251.         bne.b    LC1D2
  252.         moveq    #0,D0
  253.         move.w    (-$42,A5),D0
  254.         clr.b    (A2,D0.L)
  255.  
  256.         movea.l    ($2A,SP),A3
  257.         moveq    #0,D0
  258.         move.l    D0,-(SP)
  259.         moveq    #1,D1
  260.         move.l    D1,-(SP)
  261.         move.l    #WA_RMBTrap,-(SP)
  262.         move.l    D1,-(SP)
  263.         move.l    #WA_NoCareRefresh,-(SP)
  264.         move.l    D1,-(SP)
  265.         move.l    #WA_Borderless,-(SP)
  266.         move.l    D1,-(SP)
  267.         move.l    #WA_Backdrop,-(SP)
  268.         moveq    #$10,D2
  269.         move.l    D2,-(SP)
  270.         move.l    #WA_Height,-(SP)
  271.         move.l    D2,-(SP)
  272.         move.l    #WA_Width,-(SP)
  273.         move.l    D0,-(SP)
  274.         move.l    #WA_Top,-(SP)
  275.         move.l    D0,-(SP)
  276.         move.l    #WA_Left,-(SP)
  277.         move.l    (-$18,A5),-(SP)
  278.         move.l    #WA_PubScreenName,-(SP)
  279.         move.l    A3,-(SP)
  280.         bsr.w    LC3D2
  281.         lea    ($50,SP),SP
  282.         move.l    D0,($20,SP)
  283.         tst.l    D0
  284.         beq.w    LC350
  285.  
  286.         moveq    #$14,D1
  287.         move.l    D1,(-$38,A5)
  288.         clr.l    (-$34,A5)
  289.         move.l    (-$24,A5),(-$30,A5)
  290.         move.l    A2,(-$2C,A5)
  291.         movea.l    A2,A0
  292.         moveq    #0,D1
  293.         move.w    ($24,SP),D1
  294.         adda.l    D1,A0
  295.         move.l    A0,(-$28,A5)
  296.  
  297.         movem.l    A2/A3/A6,-(SP)
  298.         movea.l    D0,A0
  299.         movea.l    A3,A6
  300.         lea    (-$38,A5),A1
  301.         suba.l    A2,A2
  302.         movea.l    A2,A3
  303.         jsr    (_LVOEasyRequestArgs,A6)
  304.         movem.l    (SP)+,A2/A3/A6
  305.  
  306.         move.l    D0,D7
  307.         moveq    #0,D6
  308.         move.l    D7,-(SP)
  309.         pea    (OutputString,PC)
  310.         pea    (-$52,A5)
  311.         jsr    (LC3F6,PC)
  312.         lea    (12,SP),SP
  313.  
  314.         move.l    A6,-(SP)
  315.  
  316.         lea    (-$52,A5),A0
  317.         move.l    A0,D1
  318.         movea.l    ($32,SP),A6
  319.         jsr    (_LVOPutStr,A6)
  320.  
  321.         lea    (VarName,PC),A0
  322.         move.l    A0,D1
  323.         lea    (-$52,A5),A0
  324.         move.l    A0,D2
  325.         moveq    #-1,D3
  326. LC32E        addq.l    #1,D3
  327.         cmpi.b    #10,(A0)+
  328.         bne.b    LC32E
  329.         move.l    #GVF_LOCAL_ONLY,D4
  330.         jsr    (_LVOSetVar,A6)
  331.  
  332.         movea.l    (SP)+,A6
  333.  
  334.         move.l    A6,-(SP)
  335.         movea.l    ($24,SP),A0
  336.         movea.l    A3,A6
  337.         jsr    (_LVOCloseWindow,A6)
  338.         movea.l    (SP)+,A6
  339.  
  340. LC350        movea.l    ($32,SP),A2
  341.         movea.l    ($26,SP),A1
  342.         move.l    A6,-(SP)
  343.         movea.l    A2,A6
  344.         jsr    (_LVOFreeVec,A6)
  345.         movea.l    (SP)+,A6
  346.         bra.b    LC370
  347.  
  348. *****************************************************************************
  349.  
  350. LC364        move.l    A6,-(SP)
  351.         movea.l    A3,A6
  352.         jsr    (_LVOIoErr,A6)
  353.         move.l    D0,D7
  354.         movea.l    (SP)+,A6
  355.  
  356. LC370        lea    (Buffer,PC),A3
  357.         move.l    (A3),D1
  358.         beq.b    LC388
  359.         clr.l    (A3)
  360.         movea.l    ($2E,SP),A3
  361.         move.l    A6,-(SP)
  362.         movea.l    A3,A6
  363.         jsr    (_LVOFreeArgs,A6)
  364.         movea.l    (SP)+,A6
  365.  
  366. LC388        movea.l    ($32,SP),A2
  367.         move.l    A6,-(SP)
  368.         movea.l    ($2E,SP),A1
  369.         movea.l    A2,A6
  370.         jsr    (_LVOCloseLibrary,A6)
  371.         movea.l    (SP)+,A6
  372.  
  373. LC39A        tst.l    D6
  374.         beq.b    LC3BC
  375.  
  376.         movea.l    ($2E,SP),A3
  377.         move.l    A6,-(SP)
  378.         move.l    D7,D1
  379.         movea.l    A3,A6
  380.         jsr    (_LVOSetIoErr,A6)
  381.         movea.l    (SP)+,A6
  382.  
  383.         move.l    A6,-(SP)
  384.         move.l    D7,D1
  385.         moveq    #0,D2
  386.         movea.l    A3,A6
  387.         jsr    (_LVOPrintFault,A6)
  388.         movea.l    (SP)+,A6
  389.  
  390. LC3BC        move.l    A6,-(SP)
  391.         movea.l    A3,A1
  392.         movea.l    A2,A6
  393.         jsr    (_LVOCloseLibrary,A6)
  394.         movea.l    (SP)+,A6
  395.  
  396. LC3C8        move.l    D6,D0
  397.         movem.l    (SP)+,D2/D3/D5-D7/A2/A3/A6
  398.         unlk    A5
  399.         rts
  400.  
  401. *****************************************************************************
  402.  
  403. LC3D2        link.w    A5,#0
  404.         movem.l    A3/A6,-(SP)
  405.         movea.l    (8,A5),A3
  406.         move.l    A6,-(SP)
  407.         suba.l    A0,A0
  408.         lea    (12,A5),A1
  409.         movea.l    A3,A6
  410.         jsr    (_LVOOpenWindowTagList,A6)
  411.         movea.l    (SP)+,A6
  412.         movem.l    (SP)+,A3/A6
  413.         unlk    A5
  414.         rts
  415.  
  416. *****************************************************************************
  417.  
  418. LC3F6        movem.l    A2-A4/A6,-(SP)
  419.         movea.l    ($14,SP),A3
  420.         movea.l    ($18,SP),A0
  421.         lea    ($1C,SP),A1
  422.         lea    (LC41A,PC),A2
  423.         movea.l    (4).l,A6
  424.         jsr    (_LVORawDoFmt,A6)
  425.         movem.l    (SP)+,A2-A4/A6
  426.         rts
  427.  
  428. LC41A        move.b    D0,(A3)+
  429.         rts
  430.  
  431. *****************************************************************************
  432.  
  433. Buffer        dc.l    0
  434.  
  435. VarName        dc.b    "ReqChGG",0
  436. DOSName        dc.b    "dos.library",0
  437. INTName        dc.b    "intuition.library",0
  438. ArgTemplate    dc.b    "TITLE/A,BODY/A,GADGETS/M,PUBSCREEN/K",0,0
  439. OutputString    dc.b    "%ld",$A,0,0
  440.  
  441. *****************************************************************************
  442.         
  443. Version dc.b "$VER: reqch 40.1 (23.10.96) replacement for requestchoice",0
  444.  
  445. * eof ***********************************************************************
  446.